mod routes;
mod common;
mod models;
mod services;
mod dao;

use actix_web::web;
use common::config::Config as DbConfig;
use sqlx::MySqlPool;
use std::env;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    use actix_web::{App, HttpServer};

    let current_dir = env::current_dir()?;
    println!("当前工作目录: {}", current_dir.display());

    let config_result = DbConfig::from_yaml("config.yaml");
    // 解包并处理结果
    let config = match config_result {
        Ok(cfg) => {
            println!("成功加载配置文件: {:?}", cfg); // 打印配置信息
            cfg
        }
        Err(e) => {
            eprintln!("加载配置文件失败: {}", e);
            return Err(std::io::Error::new(std::io::ErrorKind::Other, "无法加载配置文件"));
        }
    };
    println!("成功加载配置文件: {:?}", config); // 打印配置信息


    // 创建数据库连接池
    let pool = MySqlPool::connect(&config.database.url)
        .await
        .expect("Failed to create database pool");

    println!("Database URL: {}", config.database.url);
    println!("启动端口: {}", config.port);
    println!("最大连接数: {}", config.max_connections);
    println!("工作线程数: {}", config.workers);

    // 进入到这里说明没有错误，可以安全地解包 `Ok` 值
    HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(pool.clone()))
            // 注册用户路由
            .configure(routes::user_routes::user_routes)
            // 注册订单路由
            .configure(routes::order_routes::order_routes)
    })
        .bind(("0.0.0.0", config.port))?
        .max_connections(config.max_connections)
        .workers(config.workers)
        .run()
        .await
}